/* stack.h */

/**
 * 栈操作的相关函数 
 */

#ifndef __STACK_H__
#define __STACK_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ERROR	-1
#define OK		0

#define MAXSIZE 1000

typedef struct node{ //定义结点类型
	char *tag;
	char *context;
	struct node *prev, *next, *parent, *child, *last_child;
}Node;
typedef Node* type_t;
typedef struct{
	type_t *data;	//用来存结点的栈
	int index;
}Stack;

/* 创建栈 */
Stack *stack_create();
/* 销毁栈 */
void stack_destroy(Stack *stack);
/* 压栈操作，成功返回0， 失败返回-1 */
int push(Stack *stack, type_t data);
/* 出栈操作，成功返回0，失败返回-1 */
int pop(Stack *stack, type_t *pData);
/* 获取栈顶元素 */
type_t getHead(Stack *stack);
/* 栈顶减一 */
void pop_null(Stack *stack);
/* 获取栈的当前大小 */
int stack_size(Stack *stack);

#endif /* __STACK_H__ */
